package com.example.demo.service.Impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.bean.PageConfigItem;
import com.example.demo.dto.ModuleItemDto;
import com.example.demo.dto.PageConfigItemBatchDto;
import com.example.demo.dto.PageConfigItemDto;
import com.example.demo.mapper.PageConfigItemMapper;
import com.example.demo.service.PageConfigItemService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

@Service
@RequiredArgsConstructor
public class PageConfigItemServiceImpl extends ServiceImpl<PageConfigItemMapper, PageConfigItem> implements PageConfigItemService {


    private final PageConfigItemMapper itemMapper;
    @Override
    public void batchCreate(PageConfigItemBatchDto dto) {
        List<PageConfigItem> items = new ArrayList<>();

        /* 1. 新结构 modules */
        if (dto.getModules() != null) {
            for (ModuleItemDto m : dto.getModules()) {
                int idx = m.getOrderIndex() == null ? items.size() : m.getOrderIndex();
                switch (m.getType()) {
                    case "mixed":
                        PageConfigItem mi = new PageConfigItem();
                        mi.setPageConfigId(dto.getPageConfigId());
                        mi.setContentType(PageConfigItem.ContentTypeEnum.MIXED);   // ← 枚举
                        mi.setContent(m.getContent());
                        mi.setOrderIndex(idx);
                        items.add(mi);
                        break;
                    case "image":
                        for (String url : m.getList()) {
                            PageConfigItem it = new PageConfigItem();
                            it.setPageConfigId(dto.getPageConfigId());
                            it.setContentType(PageConfigItem.ContentTypeEnum.IMAGE); // ← 枚举
                            it.setContent(url);
                            it.setOrderIndex(idx++);
                            items.add(it);
                        }
                        break;
                    case "video":
                        for (String url : m.getList()) {
                            PageConfigItem vi = new PageConfigItem();
                            vi.setPageConfigId(dto.getPageConfigId());
                            vi.setContentType(PageConfigItem.ContentTypeEnum.VIDEO); // ← 枚举
                            vi.setContent(url);
                            vi.setOrderIndex(idx++);
                            items.add(vi);
                        }
                        break;
                }
            }
        } else {
            /* 2. 兜底老字段 */
            int idx = 0;
            if (StringUtils.hasText(dto.getTextContent())) {
                PageConfigItem t = new PageConfigItem();
                t.setPageConfigId(dto.getPageConfigId());
                t.setContentType(PageConfigItem.ContentTypeEnum.TEXT); // ← 枚举
                t.setContent(dto.getTextContent());
                t.setOrderIndex(idx++);
                items.add(t);
            }
            if (dto.getImageUrls() != null) {
                for (String url : dto.getImageUrls()) {
                    PageConfigItem i = new PageConfigItem();
                    i.setPageConfigId(dto.getPageConfigId());
                    i.setContentType(PageConfigItem.ContentTypeEnum.IMAGE); // ← 枚举
                    i.setContent(url);
                    i.setOrderIndex(idx++);
                    items.add(i);
                }
            }
            if (dto.getVideoUrls() != null) {
                for (String url : dto.getVideoUrls()) {
                    PageConfigItem v = new PageConfigItem();
                    v.setPageConfigId(dto.getPageConfigId());
                    v.setContentType(PageConfigItem.ContentTypeEnum.VIDEO); // ← 枚举
                    v.setContent(url);
                    v.setOrderIndex(idx++);
                    items.add(v);
                }
            }
        }

        if (!items.isEmpty()) saveBatch(items);
    }

    @Override
    @Transactional
    public void batchSaveItems(PageConfigItemDto dto) {
        // 先删除该配置下的所有现有项
        itemMapper.deleteByPageConfigId(dto.getPageConfigId());

        // 批量插入新项
        for (PageConfigItemDto.ModuleDTO module : dto.getModules()) {
            PageConfigItem item = new PageConfigItem();
            item.setPageConfigId(dto.getPageConfigId());
            item.setContentType(module.getType());
            item.setOrderIndex(module.getOrderIndex());
            item.setContent(module.getContent());
            item.setList(module.getList());

            itemMapper.insert(item);
        }
    }

    @Override
    public List<PageConfigItem> getByPageConfigId(Integer pageConfigId) {
        return itemMapper.selectByPageConfigId(pageConfigId);
    }
}
